Package com.apps.services

Source Code of com.apps.services.GoogleDirectionsService

/*
* @author:Brandon Wong
*/
package com.apps.services;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.LinkedList;
import java.util.List;

import com.apps.datastore.dao.CourseInformationObject;
import com.apps.datastore.dao.SectionInformationObject;
import com.apps.ubc.cc.model.BuildingModel;
import com.apps.ubc.cc.model.GoogleDirectionModel;
import com.apps.utils.WrapperUtils;


public class GoogleDirectionsService {

  private static final String GOOLGURL = "http://maps.googleapis.com/maps/api/directions/xml?origin=<source>&destination=<destination>&mode=walking&sensor=false";

  private String setURL(SectionInformationObject source,
      SectionInformationObject destination, String googleURL) {

    googleURL = replaceTag(source, "<source>", googleURL);
    googleURL = replaceTag(destination, "<destination>", googleURL);

    return googleURL;
  }

  private String replaceTag(SectionInformationObject section,
      String to_replace, String url) {

    // This is to get the lat/long
    UBCWayfindingService addrParser;
    BuildingModel addr;
    String buffer;

    addrParser = new UBCWayfindingService();
    addr = addrParser.search(section.getBuilding());

    buffer = addr.getLatitude();
    buffer = buffer.concat(",");
    buffer = buffer.concat(addr.getLongitude());

    return url.replace(to_replace, buffer);
  }

  public String setURL(String[] section, String to_replace, String url) {

    String buffer = "";

    if (section.length <= 2) {
      buffer = section[0];
      for (int i = 1; i < section.length; i++) {
        buffer = buffer.concat(",");
        buffer = buffer.concat(section[i]);
      }

    }

    return url.replace(to_replace, buffer);
  }

  private static GoogleDirectionModel getDirectionXml(String url)
      throws MalformedURLException, IOException {
    // just to make sure
    String q_address = url.replaceAll(" ", "\\+");
    System.out.println(q_address);

    BufferedReader br = new BufferedReader(new InputStreamReader(new URL(
        q_address).openStream()));
    String line = br.readLine();

    String buffer_time;
    //int time = 0;

    String buffer_distance;
    //double distance = 0;

    try {
      // Find the last </step>. That contains the
      // total distance and length
      StringBuilder buffer=null;
      while (line != null && !line.contains("<copyrights>")) {
          if(line.contains("</step>")){
            buffer=new StringBuilder();
            while(line!=null && !line.contains("</distance>")){
              buffer.append(line);
              line=br.readLine();
            }
          }else{
            line=br.readLine();
          }
      }
      //System.out.println(buffer.toString());
      //buffer should have the last <step>
      String duration=WrapperUtils.stringInBwtn("<duration>", "</duration>", buffer.toString());
      String time=WrapperUtils.stringInBwtn("<text>", "</text>", duration);
     
      String distance_text=WrapperUtils.stringInBwtn("<distance>", "/text>", buffer.toString());
      String distance= WrapperUtils.stringInBwtn("<text>", "<", distance_text);
     
      int duration_time=Integer.parseInt(time.split(" min")[0]);
      double duration_distance=Double.parseDouble(distance.split(" km")[0]);
      return new GoogleDirectionModel(duration_distance, duration_time);

    } finally {
      br.close();
    }

  }

  public GoogleDirectionModel getDirections(SectionInformationObject source,
      SectionInformationObject destination) {

    String url = GOOLGURL;

    url = setURL(source, destination, url);
    try {
      return getDirectionXml(url);
    } catch (MalformedURLException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    } catch (IOException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    }
    return null;
  }

}
TOP

Related Classes of com.apps.services.GoogleDirectionsService

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.